{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * with extra individual transit views"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/extended_20_run_11/1/AstroCNNModel_extended_20201208_134209',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/2/AstroCNNModel_extended_20201208_141448',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/3/AstroCNNModel_extended_20201208_144715',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/4/AstroCNNModel_extended_20201208_152004',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/5/AstroCNNModel_extended_20201208_155249',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/6/AstroCNNModel_extended_20201208_162545',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/7/AstroCNNModel_extended_20201208_165820',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/8/AstroCNNModel_extended_20201208_173103',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/9/AstroCNNModel_extended_20201208_180343',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_11/10/AstroCNNModel_extended_20201208_183642']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/extended_20_run_11'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-20-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v4-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 2\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 3\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 4\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 5\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 6\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 7\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 8\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 9\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 10\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[0] >= config.hparams.prediction_threshold:\n",
    "            agg_preds[tic_id].append('disp_E')\n",
    "        else:\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(pred_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_E', 'disp_N', 'disp_J', 'disp_S', 'disp_B']\n",
    "\n",
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9619565217391305\n",
      "Precision: 0.7901785714285714\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_E_p'] > 0)\n",
    "pos = (pl['disp_E'] > 0)\n",
    "\n",
    "pneg = (pl['disp_E_p'] == 0)\n",
    "neg = (pl['disp_E'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "118412801\n",
      "141753278\n",
      "365242787\n",
      "384065528\n",
      "404220255\n",
      "419739825\n",
      "104485403\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.005866</td>\n",
       "      <td>0.039559</td>\n",
       "      <td>0.944333</td>\n",
       "      <td>0.126163</td>\n",
       "      <td>0.000924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.011091</td>\n",
       "      <td>0.028138</td>\n",
       "      <td>0.906344</td>\n",
       "      <td>0.094862</td>\n",
       "      <td>0.000900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.005645</td>\n",
       "      <td>0.039240</td>\n",
       "      <td>0.932001</td>\n",
       "      <td>0.150872</td>\n",
       "      <td>0.001349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.016992</td>\n",
       "      <td>0.038920</td>\n",
       "      <td>0.691352</td>\n",
       "      <td>0.353000</td>\n",
       "      <td>0.002365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.073969</td>\n",
       "      <td>0.018455</td>\n",
       "      <td>0.320330</td>\n",
       "      <td>0.350303</td>\n",
       "      <td>0.000799</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.002179</td>\n",
       "      <td>0.055400</td>\n",
       "      <td>0.982109</td>\n",
       "      <td>0.050403</td>\n",
       "      <td>0.000932</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.006426</td>\n",
       "      <td>0.036659</td>\n",
       "      <td>0.964114</td>\n",
       "      <td>0.063358</td>\n",
       "      <td>0.000487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.002648</td>\n",
       "      <td>0.045870</td>\n",
       "      <td>0.955333</td>\n",
       "      <td>0.120645</td>\n",
       "      <td>0.000716</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.003849</td>\n",
       "      <td>0.064449</td>\n",
       "      <td>0.957340</td>\n",
       "      <td>0.078219</td>\n",
       "      <td>0.000567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104485403</th>\n",
       "      <td>0.014055</td>\n",
       "      <td>0.025942</td>\n",
       "      <td>0.882184</td>\n",
       "      <td>0.076422</td>\n",
       "      <td>0.000337</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_E    disp_N    disp_J    disp_S    disp_B\n",
       "tic_id                                                     \n",
       "104485403  0.005866  0.039559  0.944333  0.126163  0.000924\n",
       "104485403  0.011091  0.028138  0.906344  0.094862  0.000900\n",
       "104485403  0.005645  0.039240  0.932001  0.150872  0.001349\n",
       "104485403  0.016992  0.038920  0.691352  0.353000  0.002365\n",
       "104485403  0.073969  0.018455  0.320330  0.350303  0.000799\n",
       "104485403  0.002179  0.055400  0.982109  0.050403  0.000932\n",
       "104485403  0.006426  0.036659  0.964114  0.063358  0.000487\n",
       "104485403  0.002648  0.045870  0.955333  0.120645  0.000716\n",
       "104485403  0.003849  0.064449  0.957340  0.078219  0.000567\n",
       "104485403  0.014055  0.025942  0.882184  0.076422  0.000337"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 104485403)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E_p</th>\n",
       "      <th>disp_N_p</th>\n",
       "      <th>disp_J_p</th>\n",
       "      <th>disp_S_p</th>\n",
       "      <th>disp_B_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_E_p, disp_N_p, disp_J_p, disp_S_p, disp_B_p, maxcount, disp_E, disp_N, disp_J, disp_S, disp_B]\n",
       "Index: []"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 114053589]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 1558)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][0]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "        \n",
    "pred_es.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_E']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = float(np.sum(pred_pos))\n",
    "    num_true_pos = float(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9696631397927237, max R: 0.9945652173913043, max P: 1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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x+DgoLq6ujhGVHCMqOZxlmNEJKljRP49dfeKcxj6MSKPzxGRej9GSJo0Zo4RET5HROrxGDFRX1+vjh6NZpsoPEaU+tnUs8SLHmZmkt4v6QOSNiieR8TMDkj6N0mfcffuqfeQiMJZP2dyXUg+SRXPRmRmVyj6/kcUTV6a1MSs03r00UdfXb7yyislSd3d3ZP+4a9du1bHHXecXn75ZW3btq1o2+LFi3XuuedqdHS0aH95mzZtUktLi5577jnt37+/aNuqVau0YsUKHTp0SFu2bCna1tnZqQsuuECStHnz5kkHjA0bNqijo0O7du3Svn37iratWLFCq1atUk9Pjx5//PGibS0tLdq0aZMk6cknn5x0sDnvvPO0aNEi7dmzR7t37y7advzxx+v000/XwMDApO/VzHTFFVdIit7Dif/wzzzzTB177LF68cUXtX379qJtS5Ys0dlnn62RkZGS7+Gll16qpqYmbdu2TQcPHizatnr1ai1fvlwHDhxQd3fxP5uuri6tX79ekkru96KLLlJbW5t27typl156qWjbypUrdfLJJ+vIkSN68skni7blcjldfPHFkqQnnnhi0n8E69at08KFC7V7927t2bOnaNuJJ56o0047TX19fZPG1NjYqMsui6bW2bJly6SD/VlnnaWlS5dq37592rFjhyS9+j0vXbpUZ511loaHh0t+r5dffrnMTFu3btXhw4eLtq1Zs0YnnHCCXnnlFW3durVo28KFC7Vu3Tq5e8n9bty4Ua2trdq+fbteeeWVom2nnHKKTjrpJB06dEhPP/100bb29nZdeOGFkqTHHnts0n8w69evV1dXl3bv3q29e/cWbVu+fLlWr16tnp4ePfbYY0Xbmpubdckll0iSnnrqqUn/wZ9zzjk65phj9MILL2jXrl1F25YtW6YzzjhDg4ODJb9XjhGRNI4Rzz//vJYuXcoxYhbHiDyOEZF6PEbkP8SPjY1N+vcocYzI43NEZD4fIyRNeo85RkT4HBGpx2OEJrwvzzzzjHr3NEoqPkZM/Hde7yzJ38HNrF3S3ZJel//ShCauqBjw6+7+D4kNZPK4jpWUP1rf5e7XTtP+RUnLJD3l7udU0E+rpMclnS7pFnf/nRJtdkpaKWmXu588031L0s033/waSbsl6Z3vfKeWLl366rampiblcjmNjY29+p9A/oNG4TLV1/lVfQ31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Bw8eLNq2evVqLV++XAcOHFB3d3fRtq6uLq1fv16SSu73oosuUltbm3bu3KmXXnqpaNvKlSt18skn68iRI3ryySeLtuVyOV188cWSpCeeeGLSfwTr1q3TwoULtXv3bu3Zs6do24knnqjTTjtNfX19k8bU2Nioyy6LrjLbsmXLpIP9WWedpaVLl2rfvn3asWOHJL36PS9dulRnnXWWhoeHS36vl19+ucxMW7du1eHDh4u2rVmzRieccIJeeeUVbd26tWjbwoULtW7dOrl7yf1u3LhRra2t2r59u1555ZWibaeccopOOukkHTp0SE8//XTRtvb2dl144YWSpMcee2zSfzDr169XV1eXdu/erb179xZtW758uVavXq2enh499thjRduam5t1ySWXSJKeeuqpSf85nXPOOTrmmGP0wgsvaNeuXUXbli1bpjPOOEODg4Mlv1eOEZE0jhHPP/+8li5dyjFiFseIPI4RkXo8RuQ/xI+NjU369yhxjMjjc0RkPh8jJE16jzlGRPgcEZnPx4iJ/87rnYU4AaaZrZD083j1793916Zp/3NFZ3k85+6rqziO2yR9IF79uru/t5LX33y8XouiAAAgAElEQVTzza+RtFuS3vnOd2rp0qWvbmtqalIul9PY2Nir/wnkP2gULlN9zWb1NWt/oTl48KC6u7u1du1atbe381fcCt9D/kIzP44RfX196u7ufvWDOseI+v4rLseI2Z/psWXLFp1//vklJ3jkGBHhc0Rkvh4jjhw5os2bN7/6uWUm7yHHiAifI8bV8zFi7969uu222/KbVtx4441lr55IW6hFj2Ml5UvUd7n7tdO0f1HSMklPufs5VRrDJyR9Ol59WNJr3b2i2UgLix7XX3+9Fi1aVI2hAXVnbGxMIyMjampqUkNDyPMvI8vIOUJAzhECco6sO3LkiG699db8at0XPUK9vKWwvDeTS1Y64ueqXLxkZh/SeMGjW9KbKy14TMQBFVnW0NCglpaWtIcBJIqcIwTkHCEg50B9CfI3ZXcfkJS/COw15dqa2WKNFz12l2s7E2b2Hklfjld3SXq9u79S5iUzMvH0IyBL+vv79dRTT006pRDIEnKOEJBzhICcA/UlyKJHLD+7zWozK3fGy9qC5VndWSXPzN4m6RuK3vcXJF3t7lU5FWjiNW1AloyMjGj//v3kHJlGzhECco4QkHOg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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs = ([], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
